home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / e / ddmoduls.lha / dd_Modules / dd_gui / dd_windows.e < prev    next >
Text File  |  1995-10-06  |  2KB  |  105 lines

  1. OPT MODULE
  2.  
  3. MODULE 'intuition/intuition','dos/dos','utility/tagitem'
  4.  
  5. -> FOLD dd_window
  6. EXPORT OBJECT dd_window
  7. PUBLIC -> accessable from the outside
  8.   window:PTR TO window
  9. PRIVATE -> accessable by methods only
  10.   idcmp:LONG
  11.   busycount:CHAR
  12.   busyreq:PTR TO requester
  13. ENDOBJECT
  14. -> ENDFOLD
  15.  
  16. -> FOLD .open(newwindow,tagitems)
  17. ->
  18. -> dd_window.open(newwindow,tagitems)
  19. ->
  20. EXPORT PROC open(newwindow:PTR TO nw,tagitems:PTR TO tagitem) OF dd_window
  21.   -> temporary window
  22.   DEF window:PTR TO window
  23.  
  24.   -> window opened?
  25.   IF window:=OpenWindowTagList(newwindow,tagitems)
  26.  
  27.     -> set window pointer
  28.     self.window:=window
  29.  
  30.     -> initialize private info
  31.     self.idcmp:=self.window.idcmpflags
  32.     self.busycount:=0
  33.     self.busyreq:=NIL
  34.   ENDIF
  35. ENDPROC
  36. -> ENDFOLD
  37. -> FOLD busy
  38. EXPORT PROC busy() OF dd_window
  39.   DEF requester:PTR TO requester
  40.  
  41.   -> are we a valid instance?
  42.   IF self
  43.  
  44.     -> window was not yet in busy state?
  45.     IF self.busycount++=1
  46.  
  47.       -> clear all IDCMP flags, except refresh
  48.       ModifyIDCMP(self.window,self.window.idcmpflags AND IDCMP_REFRESHWINDOW)
  49.  
  50.       -> allocate a blocking requester
  51.       NEW self.busyreq
  52.  
  53.       -> initialize requester
  54.       InitRequester(self.busyreq)
  55.  
  56.       -> link in the requester
  57.       Request(self.busyreq,self.window)
  58.     ENDIF
  59.   ENDIF
  60. ENDPROC
  61. -> ENDFOLD
  62. -> FOLD unbusy
  63. EXPORT PROC unbusy() OF dd_window
  64.   DEF requester:PTR TO requester
  65.  
  66.   -> are we a valid instance?
  67.   IF self
  68.  
  69.     -> decrease busycount
  70.     -> self.busycount:=self.busycount-1
  71.  
  72.     -> window no longer busy?
  73.     IF self.busycount--=0
  74.  
  75.       -> unattach requester
  76.       EndRequest(self.busyreq,self.window)
  77.  
  78.       -> deallocate requester
  79.       END self.busyreq
  80.  
  81.       -> reset original IDCMP flags
  82.       ModifyIDCMP(self.window,self.idcmp)
  83.  
  84.     ENDIF
  85.   ENDIF
  86. ENDPROC
  87. -> ENDFOLD
  88. -> FOLD isbusy
  89. PROC isbusy() OF dd_window IS (self.busycount>0)
  90. -> ENDFOLD
  91. -> FOLD end
  92. PROC end() OF dd_window
  93.  
  94.   -> are we a valid instance?
  95.   IF self
  96.  
  97.     -> unbusy window if still busy
  98.     WHILE self.isbusy() DO self.unbusy()
  99.  
  100.     -> close window
  101.     CloseWindow(self.window)
  102.   ENDIF
  103. ENDPROC
  104. -> ENDFOLD
  105.